<?php

/**
 * 小红点
 *
 * @package    modules
 * @subpackage Notice
 * @author     付祥 <892576@gmail.com>
 *
 * $Id$
 */

namespace Notice;

use \Common\Bridge;
use function Couchbase\fastlzCompress;

class RedDot
{
    const FIELD_FEED_TIME = 'FeedTime';

    /**
     * DB 位置
     */
    const REDIS_DB = 0;
    /**
     * KEY
     */
    const REDIS_KEY_DOT = 'D:%d';

    /**
     * 获得用户的小红点
     *
     * @param int $uid 用户ID
     * @return array
     */
    public static function getDot($uid)
    {
        $redis = Bridge::redis(Bridge::REDIS_NOTICE_R, self::REDIS_DB);

        return $redis->hGetAll(sprintf(self::REDIS_KEY_DOT, $uid));
    }

    /**
     * 设置/更新 小红点
     *
     * @param int $uid  用户ID
     * @param int $flag 1为显示红点，0为取消红点 默认为1
     * @param int $time 关注红点的更新时间戳，0为不更新 默认为0
     * @return bool
     */
    public static function setDot($uid, $flag = 1, $time = 0)
    {
        $redis = Bridge::redis(Bridge::REDIS_NOTICE_W, self::REDIS_DB);

        return $redis->hMset(sprintf(self::REDIS_KEY_DOT, $uid), [$uid => $flag]);
    }

    /**
     * 设置/更新关注的时间点
     *
     * @param int $uid  用户ID
     * @param int $time 关注红点的更新时间戳，0为不更新 默认为0
     * @return bool
     */
    public static function setFeedTime($uid, $time = 0)
    {
        $redis = Bridge::redis(Bridge::REDIS_NOTICE_W, self::REDIS_DB);
        if ($time > 0) {
            return $redis->hMset(sprintf(self::REDIS_KEY_DOT, $uid), [self::FIELD_FEED_TIME => $time]);
        }

    }

    /**
     * 获取关注时间点
     *
     * @param $uid
     * @return string
     */
    public static function getFeedTime($uid)
    {
        $key = sprintf(self::REDIS_KEY_DOT, $uid);
        $redis = Bridge::redis(Bridge::REDIS_NOTICE_R, self::REDIS_DB);

        $val = $redis->hGet($key, self::FIELD_FEED_TIME);

        return $val === false ? 0 : intval($val);
    }

    /**
     * 设置 消息页红点
     *
     * @param int $uid 用户ID
     * @return bool
     */
    public static function setMsgDot($uid)
    {
        return static::setDot($uid);
    }
}
